package moduloEstandares;

import conexion.ManejadorConexion;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Transaction;
import pojos.Areas;
import pojos.CatReactivos;
import pojos.RelacionAplica;

/**
 *
 * @author chesp
 */
public class ManejadorRelacionesAplica {

    ManejadorConexion manejadorConexion;
    
    public ManejadorRelacionesAplica(ManejadorConexion manejadorConexion) {
        this.manejadorConexion = manejadorConexion;
    }

    public RelacionAplica getRelacionPorId(int idRelacionAplica) {
        return (RelacionAplica) manejadorConexion.session.load(RelacionAplica.class, idRelacionAplica);
    }
    
    public RelacionAplica getRelacionPorAreaYReactivo(int idArea, int idReactivo) {
        String query = "FROM RelacionAplica WHERE catReactivo = " + idReactivo +" AND area = " + idArea;
        List relaciones = manejadorConexion.ejecutaBusquedaHQL(query);
        if(relaciones.isEmpty()) {
            return null;
        } else {
            RelacionAplica relacion = (RelacionAplica) relaciones.get(0);
            return relacion;
        }
    }
    
    public List getFullRelaciones() {
        String query = "FROM RelacionAplica";
        List areas = manejadorConexion.ejecutaBusquedaHQL(query);
        return areas;
    }

    public void creaYGuardaRelacion(int idArea, int idReactivo, int calificacion) {
        Transaction transaccion= manejadorConexion.session.beginTransaction();
        RelacionAplica nuevaRelacion = new RelacionAplica();
        nuevaRelacion.setArea((Areas) manejadorConexion.session.load(Areas.class, idArea));
        nuevaRelacion.setCatReactivo((CatReactivos) manejadorConexion.session.load(CatReactivos.class, idReactivo));
        nuevaRelacion.setCalificacion(calificacion);
        manejadorConexion.session.save(nuevaRelacion);
        transaccion.commit();
    }

    public boolean tieneRelacion(int idArea, int idReactivo) {
        if(getRelacionPorAreaYReactivo(idArea, idReactivo) == null) {
            return false;
        }
        return true;
    }
    
    public void borraRelacionPorAreaYReactivo(int idArea, int idReactivo) {
       boolean commit = false;
       Transaction transaction = manejadorConexion.session.beginTransaction();
       try
       {
         Query query = manejadorConexion.session.createQuery
         ( "DELETE FROM RelacionAplica WHERE idArea = :idArea AND idReactivo = :idReactivo" );
         query.setInteger( "idArea", idArea );
         query.setInteger( "idReactivo", idReactivo);
         query.executeUpdate();
         commit = true;
       }
       finally{
         if(commit)
           transaction.commit();
         else
           transaction.rollback();
       }
     }

    
    
}
